Proxy servers are used in many contexts to allow clients to make indirect network connections to other network services. In general, a proxy server is a computer that acts as an intermediary between a client application, such as a web browser, and a destination server that will service the client. Typically, a client communicates a request to the proxy server and the proxy server fulfills the request by relaying the request to a different server and then relaying the response from that other server back to the client. A client may request a connection to a particular server connected to the network, a file, or any other resource available on a different server. In some cases, the proxy server may satisfy the request without relaying the request to a different server, such as by providing a file from the proxy server's own cache.
Many different types of proxy servers exist having specialized functions. For example, a web proxy may provide a cache of web pages and files that are available on remote web servers so that local network clients may access the cached resources more efficiently, quickly, or reliably. Similarly, an intercepting proxy may provide enforcement of network use policies (e.g., restrictions on websites that may be viewed) or security, anti-malware (i.e., hostile, intrusive, or annoying software or program code), and/or caching services.
A reverse proxy is generally a proxy server that routes request from clients communicating over a packet-switching network, such as the Internet, to a destination server. Reverse proxies may be used to provide security for the destination servers, apply encryption, or distribute the load of client requests to several servers, among other functions.
Requests received by proxy servers often require conversion to a different form in order for the request to be understood by a destination server and elicit a valid response. Responses from destination servers may also require conversion or modification in order to be understood by the client. For example, a request communicated via Hypertext Transfer Protocol (HTTP) may need to be converted to a Hypertext Transfer Protocol Secure (HTTPS) format for transmittal to a destination server residing outside a firewall. Similarly, the header of a request or response may need to be modified to make the request compatible with the destination server, or the response compatible with the client.
Other conditions may also exist affecting the efficiency and reliability of a network. For example, certain destination servers may be overloaded with requests, whereas other servers, which may have information that is identical to that contained on the overloaded servers, may be experiencing light traffic. Similarly, some of the servers may be off-line or experiencing problems, making them unavailable to respond to requests. However, these conditions may dissipate at some point thereafter, making the previously unavailable servers once again capable of responding to requests. Inefficient use of a network because of these and other issues can generate significant losses as a result of time wasted by waiting for slow responses, system failures, and the receipt of inaccurate or worthless data.
Thus, there is a need for an apparatus that promotes the accurate and efficient transfer of data among clients, servers, and recipients and receives requests from clients and responses from servers via both secure or non-secure connections.